/*7+pHA7T99AblPIJ8t7diTHAXsf7KHMA/nuwNxVc3ZFjutOfjonlfUMW3FgMq2g4BzByPhjxbLzcv
Nv+to0ivaQ==*/
// 表体行操作列处理
import constant from '../../../constants';
import fa from 'fa';
const { fa_components } = fa;
const { DeptMidlevRefFilter } = fa_components;
const { queryOnlyLeafCanSelect } = DeptMidlevRefFilter;

export default function(props, moudleid, key, value, index, record) {
    // 如果数量为空即为盘亏，设置显示字段盘点后状态不可编辑
    const card_num_after = this.props.cardTable.getValByKeyAndIndex(
        constant.AREA.STEP.DETAIL_LIST,
        index,
        'card_num_after'
    ).value;
    if (card_num_after == '0') {
        const WITH_V = JSON.parse(JSON.stringify(constant.INVENTORY_ITEMS.WITH_V));
        for (const invkey in WITH_V) {
            if (key == invkey) {
                return false;
            }
        }
        const UNWITH_V = JSON.parse(JSON.stringify(constant.INVENTORY_ITEMS.UNWITH_V));
        delete UNWITH_V.card_num_after;
        for (const invkey in UNWITH_V) {
            if (key == invkey) {
                return false;
            }
        }
    }
    // 如果当前设备是非盘盈，则不可编辑
    if ((key == 'asset_name' || key == 'pk_category') && record.values.check_result.value != '1') {
        return false;
    }

    // 处理管理部门非末级
    if (
        key == 'pk_mandept_after_v'
		|| key == 'pk_mandept_after'
		|| key == 'pk_usedept_after_v'
		|| key == 'pk_usedept_after'
    ) {
        let pk_org = this.props.search.getSearchValByField(constant.AREA.STEP.INVENTORY_RANGE, 'pk_org').value
            .firstvalue;
        if (pk_org == null || pk_org == '') {
            const { that } = this.props;
            pk_org = that.echartsData.pk_org;
        }
        // 表体部门非末级处理
        const field = ['pk_mandept_after_v', 'pk_mandept_after', 'pk_usedept_after_v', 'pk_usedept_after']; // 传管理部门、使用部门字段
        const tableId = constant.AREA.STEP.DETAIL_LIST;
        const assembleData = {
            tableId,
            pk_org,
            field
        };
        // 该方法只能处理管理部门，使用部门在表体参照过滤中进行处理
        queryOnlyLeafCanSelect.call(this, props, assembleData);
    }

    // 如果盘点前单使用部门字段有值（升级前的存量盘点单或者升级前盘点单收回后的自由态盘点单），则多使用部门字段不可编辑，只能继续使用但是用部门字段完成当前盘点单
    if (key == 'usedept_after') {
        // 取第一个非盘盈资产（防止页面排序）的使用部门，不能取当前行是因为如果当前行是盘盈资产，肯定没有盘点前部门
        // 2207版本之前，盘点前使用部门肯定有值
        const visibleRows = this.props.cardTable.getVisibleRows(constant.AREA.STEP.DETAIL_LIST);
        let editable = true; // 默认usedept_after可编辑
        visibleRows.some((row) => {
            // 考虑到2207为未来版本，所以大概率都是pk_usedept_before为空，usedept_before‘不为空’， 所以优先判断usedept_before
            // 如果usedept_before有值，则usedept_after可编辑
            const usedept_before = row.values.usedept_before.value;
            if (usedept_before) {
                editable = true; // 确认可以编辑
                return true; // 跳出some循环
            }

            // 如果pk_usedept_before有值，则usedept_after不可编辑
            const pk_usedept_before = row.values.pk_usedept_before.value;
            if (pk_usedept_before) {
                editable = false; // 确认不可编辑
                return true; // 跳出some循环
            }
        });

        // 返回最终是否可编辑
        if (!editable) {
            return false;
        }
    }

    // 如果盘点前单使用部门字段没有值（即新增的盘点单），则单使用部门盘点字段不可编辑
    if (key == 'pk_usedept_after' || key == 'pk_usedept_after_v') {
        // 取第一个非盘盈资产（防止页面排序）的使用部门，不能取当前行是因为如果当前行是盘盈资产，肯定没有盘点前部门
        // 2207版本之前，盘点前使用部门肯定有值
        const visibleRows = this.props.cardTable.getVisibleRows(constant.AREA.STEP.DETAIL_LIST);

        let editable = false; // 默认pk_usedept_after不可编辑， 默认usedept_after可编辑
        visibleRows.some((row) => {
            // 考虑到2207为未来版本，所以大概率都是pk_usedept_before为空，usedept_before‘不为空’， 所以优先判断usedept_before
            // 如果usedept_before有值，则usedept_after可编辑
            const usedept_before = row.values.usedept_before.value;
            if (usedept_before) {
                editable = false; // 确认pk_usedept_after 不可编辑
                return true; // 跳出some循环
            }

            const pk_usedept_before = row.values.pk_usedept_before.value;
            if (pk_usedept_before) {
                editable = true; // 确认pk_usedept_after可以编辑
                return true; // 跳出some循环
            }
        });

        // 返回最终是否可编辑
        if (!editable) {
            return false;
        }
    }

    return true;
}

/*7+pHA7T99AblPIJ8t7diTHAXsf7KHMA/nuwNxVc3ZFjutOfjonlfUMW3FgMq2g4BzByPhjxbLzcv
Nv+to0ivaQ==*/